/**
 * Copyright 2006 gworks.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 *  The greatest achievement is selflessness. The greatest worth is self-mastery.
 *  The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 *  The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 *  The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 *  The greatest goodness is a peaceful mind. The greatest patience is humility.
 *  The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 *  The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 * 
 * @author Ashin Wimalajeewa (ash)
 */
package org.javaongems.gwk.client;

import org.javaongems.std.client.DivPanel;
import org.javaongems.std.client.EastWestHorizPanels;
import org.javaongems.std.client.io.StringPrintStream;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HTMLTable.RowFormatter;

public class LogOutputView extends Composite implements ClickListener {
	private EastWestHorizPanels groupBarContainer;
	private DivPanel optionsBar = new DivPanel();
	private FlexTable items = new FlexTable();
	private DivPanel container = new DivPanel();
	private Button clearBtn = new Button("Clear");
	
	private LogOutputController controller;
	
	public LogOutputView() {
		initWidget(container);
		clearBtn.addClickListener(this);
		setStyleName(getElement(), "gwk-LogOutputView", true);
		buildFrame();
	}
	
	public void setUp(LogOutputController logController) {
		controller = logController;
	}
	
	public void onClick(Widget sender) {
		clearAll();
	}
	
	public void addEntry(String msg, Throwable caught) {
		String stackTraceInfo = "";
		if (caught != null && GWT.isScript()) {
			caught.printStackTrace();
			stackTraceInfo = StringPrintStream.ERROR_BUFFER.reset();
		}
		int row = items.insertRow(items.getRowCount());
		items.insertCell(row, 0);
		items.insertCell(row, 1);
		items.setText(row, 0, msg);
		items.setText(row, 1, stackTraceInfo);
		RowFormatter fmtr = items.getRowFormatter();
		fmtr.addStyleName(row, "ps-GridRow");
	}

	private void clearAll() {
		while (items.getRowCount() > 0)
			items.removeRow(0);
	}

	private void buildFrame() {
		groupBarContainer = new EastWestHorizPanels();
		container.add(groupBarContainer);
		groupBarContainer.setStyleName("gwk-LogOutputView-mainGroupSections");

		Label title = new Label("Log output");
		groupBarContainer.getWest().add(title);
		title.setStyleName("gwk-LogOutputView-mainGroupSections-txt");

		container.add(optionsBar);
		container.add(items, "std-client-width");

		optionsBar.setStyleName("std-client-width");
		optionsBar.add(clearBtn, "std-align-west");
	}
}